﻿// Bravura : A music composition and audio synthesis framework.
//
// Copyright © 2011 Paul Vanukoff (pvanukoff@gmail.com)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/.

using System.IO;
using Bravura.Core.Common;
using Bravura.Core.PluginLib;
using Bravura.Core.SynthLib.Model;

namespace Bravura.Core.SynthLib
{
	/// <summary>
	/// Audio synthesis run-time engine interface.
	/// </summary>
	public interface ISynthEngine : ICommandTarget
	{
		/// <summary>
		/// Load from a SynthProject file.
		/// </summary>
		void Load(FileInfo projectFile);

		/// <summary>
		/// Load from a SynthProject object.
		/// </summary>
		void Load(SynthProject project);

		/// <summary>
		/// Returns the requested plugin.
		/// </summary>
		IAudioPlugin GetPlugin(int pluginNum);

		/// <summary>
		/// Open the engine for use.
		/// </summary>
		void Open();

		/// <summary>
		/// Process the engine for "count" samples.
		/// </summary>
		void Process(int count);

		/// <summary>
		/// Close the engine out after use.
		/// </summary>
		void Close();

		/// <summary>
		/// Sets the gain of one input channel of a plugin.
		/// </summary>
		void SetInputGain(int pluginNum, int channel, double gain);

		/// <summary>
		/// Sets the gain of one output channel of a plugin.
		/// </summary>
		void SetOutputGain(int pluginNum, int channel, double gain);
	}
}
